在python 较新的版本中,pandas.qcut()这个函数中是有duplicates这个参数的,它能解决在等频分箱中遇到的重复值过多引起报错的问题;
在比较旧版本的python中,提供一下解决办法:
import pandas as pd
def pct_rank_qcut(series, n):
'''
series:要分箱的列
n:箱子数
'''
edages = pd.series([i/n for i in range(n)] # 转换成百分比
func = lambda x: (edages >= x).argmax() #函数:(edages >= x)返回fasle/true列表中第一次出现true的索引值
return series.rank(pct=1).astype(float).apply(func) #series.rank(pct=1)每个值对应的百分位数,最终返回对应的组数;rank()函数传入的数据类型若为object,结果会有问题,因此进行了astype